/**
 * 
 */
package br.ufal.ic.sd.mom.cliente.threadcliente;

import br.ufal.ic.sd.mom.cliente.core.Canal;
import br.ufal.ic.sd.mom.cliente.core.TratadorMensagemSaida;
import br.ufal.ic.sd.mom.cliente.exception.ClienteException;
import br.ufal.ic.sd.mom.cliente.util.Configurador;

/**
 * @author keven lenisk almeida andarde
 * 
 */
public class AgenteEmissor extends ThreadCliente {

	private TratadorMensagemSaida tratadorMensageSaida;
	private Canal canal;

	public AgenteEmissor(TratadorMensagemSaida mensagem) {
		this.tratadorMensageSaida = mensagem;
		this.isConectado = false;
		this.conectar();
	}

	public void run() {

//		while (conectado == false) {
//
//			try {
//				sleep(10000);
//			} catch (InterruptedException e) {
//				continue;
//			}
//
//			conectar();
//		}

			this.canal.write("SYSTEM_CONFIGURACTION_PORT:"
					+ Configurador.getValor(Configurador.PORTA_LOCAL));
			
			try {
				sleep(1000);
			} catch (InterruptedException e) {
			}
			
			this.canal.write("USER_NICK_NAME:"
					+ Configurador.getValor(Configurador.NICK_NAME));
			
		while (isConectado) {

			String mensagem = this.tratadorMensageSaida.getMensagem();

			this.canal.write("USER_MESSAGE:" + mensagem);
		}
	}

	private void conectar() {

		this.canal = new Canal();
		canal.setIp((Configurador.getValor(Configurador.IP_SERVIDOR)));
		canal.setPorta(Integer.parseInt(Configurador.getValor(Configurador.PORTA_SERVIDOR)));

		canal.conectar();
		this.isConectado = true;
		

	}

	@Override
	public void encerrarConexao() {

		this.canal.write("SYSTEM_LOGGOUT");
		this.canal.closeConnection();
		isConectado = false;
	}
}
